package com.ywk.base.javaBase.javaKeywords;

/**
 *
 * 初始化顺序：静态变量和静态语句块优先于实例变量和普通语句块，静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。
 *
 * 存在继承的情况下，初始化顺序为：
 * - 父类（静态变量、静态语句块）
 * - 子类（静态变量、静态语句块）
 * - 父类（实例变量、普通语句块）
 * - 父类（构造函数）
 * - 子类（实例变量、普通语句块）
 * - 子类（构造函数）
 *
 * @Author zbh
 * @Date 2023/3/29
 */
public abstract class StaticTest {

    //静态语句块在类初始化时运行一次。
    static {
        System.out.println("123");
    }

    private int x;         // 实例变量：每创建一个实例就会产生一个实例变量，它与该实例共生死
    private static int y;  // 静态变量：内存中只存在一份，类所有的实例都共享静态变量

    //静态方法在类加载的时候就存在了，它不依赖于任何实例。所以静态方法必须有实现，也就是说它不能是抽象方法。
    public /*abstract*/ static void f1() {
    }

    public abstract void f2();

    //非静态内部类依赖于外部类的实例，也就是说需要先创建外部类实例，才能用这个实例去创建非静态内部类。而静态内部类不需要。
    static class A{
        public String name="a";
    }
}

